package reflect.reflect_constructor;

import org.junit.Test;

import java.lang.reflect.Constructor;

public class TestStudent1 {
    // 1.getConstructors:
    // 获取全部的构造器:只能获取public修饰的构造器
    // Constructor[] getConstructors()
    @Test
    public void getConstructors() {
        // 第一步:获取类对象
        Class c = Student.class;
        // 第二步:提取类中的全部构造器对象
        Constructor[] constructors = c.getConstructors();
        // 第三步:遍历构造器
        for (Constructor constructor : constructors) {
            // 获取构造器的名字和参数的个数 只能拿public权限的
            System.out.println(constructor.getName() + "====>" + constructor.getParameterCount());
        }
    }

    // 2.getDeclaredConstructors()
    // 获取全部构造器(无论是public还是private修饰的都能拿到,无视权限)
    @Test
    public void getDeclaredConstructors() {
        // 第一步:获取类对象
        Class c = Student.class;
        // 第二步:提取类中的全部构造器对象
        Constructor[] constructors = c.getConstructors();
        // 第三步:遍历构造器
        for (Constructor constructor : constructors) {
            // 获取构造器的名字和参数的个数 只能拿public权限的
            System.out.println(constructor.getName() + "====>" + constructor.getParameterCount());
        }
    }

    // 3.getConstructor(Class... parameterTypes)
    // 获取某个构造器 只能拿public修饰的某个构造器
    @Test
    public void getConstructor() throws NoSuchMethodException {
        // 第一步:获取类对象
        Class c = Student.class;
        // 第二步:定位无参构造器
        Constructor constructor = c.getConstructor();
        // 获取构造器的名字和参数的个数 只能拿public权限的
        System.out.println(constructor.getName() + "====>" + constructor.getParameterCount());
    }

    // 4.getDeclaredConstructor
    // 获取某个构造器(无视权限)
    @Test
    public void getDeclaredConstructor() throws NoSuchMethodException {
        // 第一步:获取类对象
        Class c = Student.class;
        // 第二步:定位无参构造器
        Constructor constructor = c.getConstructor();
        // 获取构造器的名字和参数的个数 只能拿public权限的
        System.out.println(constructor.getName() + "====>" + constructor.getParameterCount());

        // 定位有参构造器
        // 获取构造器的名字和参数的个数 只能拿public权限的
        Constructor constructor1 = c.getConstructor(String.class,int.class);
        System.out.println(constructor1.getName() + "====>" + constructor1.getParameterCount());
    }
}
